package com.monkey.springbootvue.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

// 使用Lombok库提供的注解，@AllArgsConstructor会自动生成一个包含所有参数的构造函数
// 这样在创建该类对象时，可以方便地通过传入所有属性值来初始化对象
@AllArgsConstructor
// @NoArgsConstructor会自动生成一个无参构造函数，在一些框架（如Spring在进行对象实例化等场景）中可能会需要无参构造函数来创建对象实例
@NoArgsConstructor
// @Data注解是一个很方便的组合注解，它会自动帮我们生成常见的方法，比如所有属性的Getter和Setter方法、toString方法、equals方法和hashCode方法等，减少了手动编写这些重复代码的工作量
@Data
// 使用JPA（Java Persistence API）中的@Entity注解来表明这个类是一个实体类，意味着它会对应数据库中的一张表，表名默认与类名一致（可通过配置修改表名）
@Entity
public class Book {
    // 使用@Id注解标记这个属性为实体类的唯一标识符（主键），在数据库表中对应主键字段
    @Id
    // @GeneratedValue注解用于指定主键的生成策略，这里使用GenerationType.IDENTITY表示采用数据库自增的方式来生成主键值
    // 例如在MySQL等数据库中，当插入一条新记录时，主键字段的值会自动按照设置的自增规则递增
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String name;
    private String author;
}
